[小ネタ] CloudShell で S3 の署名付き URLを作成、ファイルをアップロードしてみた
アノテーション・テクニカルサポートチームの hato です。
ダウンロード用の S3 署名付き URLは、AWS マネジメントコンソールから手軽に生成できることもあり、触ったことがありますが、アップロード用の S3 署名付き URL は触ったことがなかったので、やってみました。
やってみた
前提
- アップロード先の S3 バケットは作成済み
AWS SDK を使用する
アップロード用の S3 署名付き URL を作成する方法は大きく二つあります。
- AWS Explorer for Visual Studio
- AWS SDK
今回は CloudShell で AWS SDK を利用して行います。 なお、署名付き URLの作成とアップロードはサンプルコードが AWS より各プログラミング言語毎に公開されているので、そちらを使用します。
Create a presigned URL for Amazon S3 using an AWS SDK - Amazon Simple Storage Service
CloudShell を開いて、SDK for Python (Boto3)用のサンプルコードをダウンロードします。
$ wget "https://raw.githubusercontent.com/awsdocs/aws-doc-sdk-examples/main/python/example_code/s3/s3_basics/presigned_url.py"
アップロード先の S3 バケット名と、アップロードするファイルを指定して、コマンドを実行します。
$ python3 presigned_url.py 【バケット名】 【オブジェクト名】 put # 実行例 $ python3 presigned_url.py <バケット名> upload_file.txt put ---------------------------------------------------------------------------------------- Welcome to the Amazon S3 presigned URL demo. ---------------------------------------------------------------------------------------- INFO: Got presigned URL: https://<バケット名>.s3.amazonaws.com/upload_file.txt Using the Requests package to send a request to the URL. Putting data to the URL. Got response: Status: 200 ----------------------------------------------------------------------------------------
指定した S3 バケットにファイルがアップロードされていることを確認します。
署名URL だけ発行して、ファイルは別にアップロードしたい
コマンドで指定したファイルがない場合、その旨のエラーが表示されますが、署名URL は発行されます。
$ python3 presigned_url.py <バケット名> upload_file.txt put ---------------------------------------------------------------------------------------- Welcome to the Amazon S3 presigned URL demo. ---------------------------------------------------------------------------------------- INFO: Got presigned URL: https://<バケット名>.s3.amazonaws.com/upload_file.txt Using the Requests package to send a request to the URL. Putting data to the URL. Couldn't find upload_file.txt. For a PUT operation, the key must be the name of a file that exists on your computer. ----------------------------------------------------------------------------------------
そのため、上記発行された URL を使って、ローカルから curl 等でアップロードもできます。
$ curl -X PUT \ --upload-file 【アップロードするファイル】 \ 【署名付き URL】 # コマンド例 $ curl -X PUT \ --upload-file upload_file.txt \ 'https://<バケット名>.s3.amazonaws.com/upload_file.txt'
参考資料
- 署名付き URL を使用したオブジェクトのアップロード - Amazon Simple Storage Service
- aws-doc-sdk-examples/python/example_code/s3/s3_basics at main · awsdocs/aws-doc-sdk-examples
- AWS SDK を使用して Amazon S3 の署名付き URL を作成する - Amazon Simple Storage Service
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。